package io.terminus.spzx.manager.service;

import com.github.pagehelper.PageInfo;
import io.terminus.spzx.model.dto.system.AssignRoleDto;
import io.terminus.spzx.model.dto.system.LoginDto;
import io.terminus.spzx.model.dto.system.SysUserDto;
import io.terminus.spzx.model.entity.system.SysUser;
import io.terminus.spzx.model.vo.system.LoginVo;

/**
 * @Author lichunlong lcl253137@alibaba-inc.com
 * @Desc 系统用户Service接口
 * @Date 2024-03-12
 */
public interface SysUserService {

    /**
     * 用户登录
     *
     * @param loginDto 用户登录
     * @return 用户登录VO
     */
    LoginVo login(LoginDto loginDto);

    /**
     * 用户退出
     *
     * @param token 登录Token
     */
    void logout(String token);

    /**
     * 获取当前登录用户信息
     *
     * @param token 用户Token
     * @return 系统用户
     */
    SysUser getUserInfo(String token);

    /**
     * 分页查询用户列表
     *
     * @param sysUserDto 系统用户DTO
     * @param current    分页信息: 当前页
     * @param limit      分页信息: 每页条数
     * @return 系统用户分页数据
     */
    PageInfo<SysUser> findByPage(SysUserDto sysUserDto, Integer current, Integer limit);

    /**
     * 保存用户
     *
     * @param sysUser 系统用户
     */
    void saveSysUser(SysUser sysUser);

    /**
     * 修改用户
     *
     * @param sysUser 系统用户
     */
    void updateSysUser(SysUser sysUser);

    /**
     * 删除用户
     *
     * @param userId 用户ID
     */
    void deleteById(Long userId);

    /**
     * 给用户分配角色授权
     *
     * @param assignRoleDto 用户角色授权关系
     */
    void assignRoleAuth(AssignRoleDto assignRoleDto);
}
